import MouseClick from './MouseClick'
import { usePlayerStore, useToolStore, usePopStore } from '@/stores'
import { toTree } from './layerTree'
import { showDialog } from '@/views/operation/manned-commute/js/addObjMove'
// import { showRadio } from '@/views/infrastructure/js/infrastructure'
import { showWLYSDialog } from '@/views/operation/js/sightsee'
import { showDialogzwxj } from '@/views/operation/js/zwxj'
import { showDialogzsj } from '@/views/operation/js/zrtq'
class AirCityInit {
  constructor() {
    this.treeList = null
    this.tourList = null
    this.mouseClick = new MouseClick()
  }

  init(divId, iid) {
    const apiOptions = {
      onReady: this.onReady,
      onApiVersion: () => {},
      onEvent: (data) => {
        this.onEvent(data)
      },
      onLog: log,
      useColorLog: true //仅用于SDK测试页面，二次开发请设置为false
    }

    const options = {
      domId: divId, //HTML元素ID（它将作为要创建的Video标签的父元素），如果未设置此参数，则不传输视频流，只进行API调用
      iid: iid, //云渲染实例的ID
      apiOptions: apiOptions, //用于指定DigitalTwinAPI的初始化选项
      reset: false, //指定是否重置实例。如果设置reset为true，每次连接（包括刷新）都会得到一个全新的实例
      keyEventTarget: 'video', //默认值为'video'，设置键盘交互事件，可选的值：'document'、'video' 、'none'
      useBuiltinCursors: true, //默认值为true，是否使用内置光标。
      urlExtraInfo: {
        //可以在WebSocket URL后面附加其他信息（例如认证信息等）（如果不需要，直接去掉此属性即可）
        //_ip: '192.168.1.4',
        //_token: 'AAABBBCCC'
      },
      ui: {
        startupInfo: true, //默认值为true，初始化过程中是否显示详细信息（如果不需要，直接去掉此属性即可）
        statusIndicator: true, //默认值为true，左上角闪烁的状态指示灯，可以从不同的颜色看出当前的状态
        statusButton: true, //默认值为false，是否在左下角显示信息按钮（如果不需要，直接去掉此属性即可）
        fullscreenButton: true, //默认值为false，是否在右下角显示全屏按钮（如果不需要，直接去掉此属性即可）
        homeButton: true, //默认值为false，是否在左下角显示“回到初始位置”按钮（如果不需要，直接去掉此属性即可）
        taskListBar: 1, //默认值为1，是否在下方显示“任务队列（API调用队列）”信息（0: 永不显示；1: 执行比较耗时的操作时显示；2: 一直显示）
        debugEventsPanel: false, //是否显示事件详细信息（仅用于调试）
        campass: false, //是否显示指北针，如果设置为true就显示，如果设置为false就隐藏，如果没有设置，就保持原状。
        mainUI: false //是否显示Cloud工具栏，如果设置为true就显示，如果设置为false就隐藏，如果没有设置，就保持原状。
      }
    }

    options.actionEventHander = {
      onmousedown: (e) => {
        const popStore = usePopStore()
        popStore.XY = [e.x, e.y]
      }
    }

    const playerHost = HostConfig.Player

    new DigitalTwinPlayer(playerHost, options).getAPI()
  }

  async onReady() {
    await __g.reset(1 | 4)
    await __g.settings.setCampassVisible(false)
    await __g.misc.setMainUIVisibility(false)
    const res = await __g.infoTree.get()
    const playerStore = usePlayerStore()
    const toolStore = useToolStore()
    playerStore.TreeInfo = res.infotree
    toolStore.InfoTree = toTree(res.infotree)
    const treeNameObj = {}
    res.infotree.forEach((item) => {
      treeNameObj[item.name] = item.iD
    })
    playerStore.TreeNameObj = treeNameObj
    playerStore.IsOnReady = true
  }

  async onEvent(data) {
    if (data && data.Data && data.Data.includes('close')) {
      __g.marker.hideAllPopupWindow()
      const id = data.Data.split('&')[1]
      if (!id.includes('亿航') && !id.includes('飞行态势')) {
        await __g.camera.stopAnimation()
        await __g.customObject.focus(id)

        setTimeout(() => {
          __g.camera.set(537243.182344, 2492013.599687, 7863.095, -31.651682, -128.043091, 1)
          __g.polyline.setThickness(id, 500)
        }, 1000)
      }
    }
    if (data.eventtype === 'LeftMouseButtonClick') {
      console.log('点击事件=====', data)
      this.mouseClick.markerClick(data)
      showDialog(data)
      // showRadio(data)
      showWLYSDialog(data)
      showDialogzwxj(data)
      showDialogzsj(data)
    }
  }
}

function log(s, nnl) {
  // console.log(s + (nnl ? '' : '\n'))
}

export default AirCityInit
